本发明公开了一种提高SDRAM数据传输效率的方法,应用于采用现场可编程阵列FPGA控制双倍速率同步动态随机存储器DDR2SDRAM的读写操作,首先选定采用的SDRAM芯片,确定读或写命令周期,然后依次编排命令,实现命令周期内时序得到最高的利用,最后由FPGA控制进行数据的高速传输。采用本方法提高了数据处理效率,降低了DDR2SDRAM的设计难度及产生问题的可能性。
1.一种提高SDRAM数据传输效率的方法,应用于采用现场可编程阵列FPGA控制双倍速率同步动态随机存储器DDR2xa0SDRAM的读写操作,其特征在于,包括步骤如下:步骤1、选定将要采用的SDRAM芯片,根据芯片参数,确定完成单个突发长度读或写操作命令需要的最小时钟数目,定义为t1;步骤2、将芯片单个突发长度对应的时钟数目定义为t2;步骤3、确定总周期,如果t1的值大于t2与SDRAM芯片存储库数目的乘积,那么总周期是t1,否则总周期是t2与存储库数目的乘积;步骤4、根据总周期数,编排控制命令表,从第一个时钟开始,逐个编排每个存储库的命令,使存储库之间相同的命令相差t2个时钟数目,使所有的命令都控制在总时钟周期内,超过总时钟周期范围的,就返回到控制命令表的前面,向后逐个找空闲的时钟周期,如果当前编排的命令和已经安排的存储库的命令位置冲突,将已安排的存储库的命令向后挪动一个时钟位置,具体为:如果t1的值大于t2与存储库数目的乘积,将已安排的存储库的命令向后挪动一个时钟位置,相应的总周期数增加一个时钟周期;如果t1的值小于t2与存储库数目的乘积,编排首个存储库时,最后的关闭命令向后挪动,总周期数不变,但挪动的数目不超过总周期数与t1的差;步骤5、按照控制命令表控制SDRAM读写。
2.根据权利要求1所述的提高SDRAM数据传输效率的方法,其特征在于,所述提高SDRAM数据传输效率的方法,还包括:控制命令表编排完后,进行微调,以配合FPGA的时序关键路径要求,所述微调是根据FPGA电路设计确定每个命令占用的时钟数目,对于某个命令,当电路一个时钟内不能提供运算结果,那么就再加一个时钟的时间处理,把整体的控制命令表处理周期增加一个时钟。
3.根据权利要求1所述的提高SDRAM数据传输效率的方法,其特征在于,所述步骤3包括步骤:步骤3.1、首先确定库存储库0的命令表,第一个时钟位置放置激活命令,然后向后偏移SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目,放置读或写命令,接着继续向后偏移SDRAM芯片参数允许的读或写到关闭的时间,放置关闭命令;步骤3.2、在控制命令表内增加存储库1的命令,在存储库0的激活命令向后偏移t2时钟周期,放置存储库1的激活命令,依次类推,在存储库0的读或写命令向后偏移t2时钟周期放置存储库1的读或写命令,最后放置关闭命令;步骤3.3、依次类推,确定所有存储库的命令编排,原则上要求所有的命令都控制在总时钟周期内,超过总时钟周期范围的,就返回到控制命令表的前面,向后逐个找空闲的时钟周期,如果当前编排的命令和已经安排的存储库的命令位置冲突,将已安排的存储库的命令向后挪动一个时钟位置。
4.根据权利要求1所述的提高SDRAM数据传输效率的方法,其特征在于,所述t1为激活命令时间,读或写到关闭时间,关闭时间的和。
5.根据权利要求3所述的提高SDRAM数据传输效率的方法,其特征在于,所述SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目为tRCD与AL的差,其中tRCD为行寻址到列寻址的延迟,AL为附加反应时间。
6.根据权利要求3所述的提高SDRAM数据传输效率的方法,其特征在于,所述SDRAM芯片参数允许的读或写到关闭的时间具体是指实际的读或写到关闭时间与芯片参数tRAS两者间的大值,所述tRAS是芯片激活至关闭时间。
技术领域本发明涉及数据存储及处理技术领域,尤其是数据通信的数据存储及处理中提高SDRAM数据传输效率的方法。
背景技术随着通信技术的发展,需要处理的数据量越来越大,数据的流量控制要求越来越高,这都要求数据存储和处理能力的提高,而数据处理能力的提高,提高接口效率是一种有效的方法。目前的硬件设计中,FPGA(Fieldxa0Programmablexa0Gate-Array现场可编程阵列)和双倍速率同步动态随机存储器DDR2xa0SDRAM的结合应用非常普遍。FPGA和DDR2xa0SDRAM连接处理内容主要是数据读写,DDR2xa0SDRAM支持的常用命令有7种:空操作(NOP)、激活操作(Active)、突发读(Burstxa0Read)、突发写(Burstxa0Write)、自动刷新(Autorefresh)、关闭(Precharge)、模式寄存器配置(Modexa0Registerxa0Set)。所有的操作命令都是通过信号线RAS_N、CAS_N、WE_N共同控制来实现的。在对DDR2xa0SDRAM进行存取数据操作之前,首先要对其初始化,即设置DDR2xa0SDRAM的普通模式寄存器和扩展模式寄存器,确定DDRSDRAM的工作方式,这些设置包括突发长度、突发类型、CAS潜伏期和工作模式以及扩展模式寄存器中的对DDR2xa0SDRAM内部延迟锁定回路(DLL)的使能与输出驱动能力的设置。初始化完成之后,DDR2xa0SDRAM便进入正常的工作状态,此时便可对存储器进行读写和刷新。DDR2xa0SDRAM在一对差分时钟的控制下工作,命令(地址和控制信号)在每个时钟的上升沿被触发。对DDR2xa0SDRAM的读和写操作是基于突发的,即从一个选定的地址单元开始,连续存取已设置长度的地址单元,该长度就是所谓的突发长度。DDR2xa0SDRAM提供的可编程的读或写的突发长度为2,4或8。数据的存取以一个激活命令(Active)开始,接着便是读(Burstxa0Read)或写(Burstxa0Write)命令。与激活命令一起被触发的地址位用来选择将要存取的区和页(或行),与读或写命令一起被触发的地址位用来选择突发存取的起始列单元。读命令被触发后,数据将在1.5~3个时钟周期之后出现在数据总线上。这个延迟就是所谓的CAS潜伏期(CASxa0latency),即从DDR2SDRAM内核读出数据到数据出现在数据总线上所需要的时间。CAS潜伏期的大小与SDRAM的速度和存储器的时钟频率有关。当要存取一个不同行的地址单元时,需要通过一个关闭(Precharge)操作关闭当前行,以下将Precharge命令称为关闭命令。自动刷新(Autorefresh)命令用来周期性地刷新DDRxa0SDRAM,以保持其内部的数据不丢失。,现有技术采用FPGA作为控制器来控制DDR2xa0SDRAM的读写操作,FPGA控制器的主要功能包括:(1)初始化DDR2xa0SDRAM;(2)简化DDR2SDRAM的读写时序。在对DDR2xa0SDRAM初始化完成之后,就可进行读、写或其他操作。在执行读/写命令之前,先要激活将要读/写的行,之后便可对该行进行突发读/写。这样当一次读写突发长度结束后,如果需要发起下一次读写,就需要发关闭命令结束这一行,然后发激活命令开启下一行,这样才能开始写下一次数据。如何简化读写时序,提高数据处理效率是FPGA控制器设计的主要难题,通常的控制器时序都保留了相当多的空操作,按照激活、读/写、关闭,然后再开启激活的循环次序控制SDRAM读写,数据处理效率不高。
发明内容本发明的主要目的是为了解决现有的问题,提供了一种用FPGA控制DDR2xa0SDRAM的数据存储的方法,充分利用单次读写过程中的空闲时钟,提高了数据处理效率,降低了DDR2xa0SDRAM的设计难度及产生问题的可能性。一种提高SDRAM数据传输效率的方法,应用于采用现场可编程阵列FPGA控制双倍速率同步动态随机存储器DDR2xa0SDRAM的读写操作,包括步骤如下:步骤1、选定将要采用的SDRAM芯片,根据芯片参数,确定完成单个突发长度读或写操作命令需要的最小时钟数目,定义为t1;步骤2、根据芯片单个突发长度对应的时钟数目,定义为t2;步骤3、确定总周期,如果t1的值大于t2与SDRAM芯片存储库数目的乘积,那么总周期是t1,否则总周期是t2与存储库数目的乘积;步骤4、根据总周期数,编排控制命令表,从第一个时钟开始,逐个编排每个存储库的命令,使存储库之间相同的命令相差t2个时钟数目,使所有的命令都控制在总时钟周期内,超过总时钟周期范围的,就返回到控制命令表的前面,向后逐个找空闲的时钟周期,如果当前编排的命令和已经安排的存储库的命令位置冲突,将已安排的存储库的命令向后挪动一个时钟位置;步骤5、按照控制命令表控制SDRAM读写。进一步地,所述提高SDRAM数据传输效率的方法,还包括:控制命令表编排完后,进行微调,以配合FPGA的时序关键路径要求。所述微调是根据FPGA电路设计确定每个命令占用的时钟数目,对于某个命令,当电路一个时钟内不能提供运算结果,那么就再加一个时钟的时间处理,把整体的控制命令表处理周期增加一个时钟。进一步地,所述步骤3包括步骤:步骤3.1、首先确定库存储库0的命令表,第一个时钟位置放置激活命令,然后向后偏移SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目,放置读或写命令,接着继续向后偏移SDRAM芯片参数允许的读或写到关闭的时间,放置关闭命令;步骤3.2、在控制命令表内增加存储库1的命令。在存储库0的激活命令向后偏移t2时钟周期,放置存储库1的激活命令,依次类推,在存储库0的读或写命令向后偏移t2时钟周期放置存储库1的读或写命令,最后放置关闭命令;步骤3.3、依次类推,确定所有存储库的命令编排,原则上要求所有的命令都控制在总时钟周期内,超过总时钟周期范围的,就返回到控制命令表的前面,向后逐个找空闲的时钟周期,如果当前编排的命令和已经安排的存储库的命令位置冲突,将已安排的存储库的命令向后挪动一个时钟位置。其中,所述当前编排的命令和已经安排的存储库的命令位置冲突时,如果t1的值大于t2与存储库数目的乘积,将已安排的存储库的命令向后挪动一个时钟位置,相应的总周期数增加一个时钟周期;如果t1的值小于t2与存储库数目的乘积,将已安排的存储库的命令向后挪动,总周期数不变,但挪动的数目不能超过总周期数与t1的差。其中,所述t1为激活命令时间,读或写到关闭时间,关闭时间的和。其中,所述SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目为tRCD与AL的差,其中tRCD为行寻址到列寻址的延迟,AL为附加反应时间。其中,所述SDRAM芯片参数允许的读或写到关闭的时间具体是指实际的读或写到关闭时间与芯片参数tRAS两者间的大值,所述tRAS是芯片激活至关闭时间。本发明的有益效果是:FPGA对DDR2xa0SDRAM的数据处理命令根据时钟统一编排,确定每个时钟对应的命令,编排的策略是首先找到读或写周期的最短时间,时间越短,效率越高,最后整个命令表的整个时间周期,接近DDR2xa0SDRAM允许的最短时间,保证了数据处理效率。命令表把命令有规律的流程化,简化了设计组合,减少了产生问题的可能性。同时,配合FPGA的时序关键路径要求,允许微调命令表,增加了应用的灵活性。排除DDR2xa0SDRAM周期性的自刷新影响,单纯的DDR2SDRAM的4个bank循环读效率可以达到100%,单纯的DDR2xa0SDRAM的4个bank循环写效率可以达到80%。
附图说明图1为本发明提高SDRAM数据传输效率的方法流程图;图2为根据本发明方法确立的具体应用的读命令表;图3为根据本发明方法确立的具体应用的写命令表。
具体实施方式下面结合附图和实施例对本发明技术方案做进一步详细说明,以下实施例不构成对本发明的限定。本发明涉及FPGA来控制DDR2xa0SDRAM的具体应用方法,在本实施例中具体应用的DDR2xa0SDRAM芯片规格及配置如下:Speedxa0Grade(速度等级):37E;存储库Bank数目:4;CASxa0latency(读命令到数据输出的时间对应的时钟数目,简称CL):CL=4;Postedxa0CASxa0additivexa0latency(附加反应时间,简称AL):AL=3;Burstxa0Length(每次读或写命令对应的能够访问的最大的DDR2SDRAM列数目,简称突发长度BL):BL=8;行寻址到列寻址的延迟tRCD(RASxa0toxa0CASxa0Delay):15ns;读命令和关闭命令之间的时间间隔tRTP(Readxa0toxa0Precharge):7.5ns;激活至关闭时间tRAS(Activexa0toxa0Prechargexa0Delay):40ns;关闭tRP(RASxa0Prechargexa0Time):15ns;FPGA和DDR2xa0SDRAM时钟工作频率可以达到250MHZ,时钟周期时间tCK为4ns。每个DDR2系列的芯片都会有规定的性能参数,以上述的37E系列芯片为例,它的tRCD(ns)规定是15ns,也就是说同一bank,进行active命令后,最少15ns后才能发起读写命令,如果我们的FPGA的工作频率是250MHZ,每个时钟周期是4ns,那么最少要4个时钟(4X4=16ns>15ns),才可以发起读或者写命令。为了体现灵活性,DDR2芯片的读写命令可以在tRCD(ns)的时间还没有到的时候发送,这就需要在DDR2芯片初始化的时候,设置提前具体几个时钟数目,这个时钟数目值称为AL。本实施例中采用的AL值设置为3,也就是说,本来需要4个时钟后,才可以发送读写命令,现在可以在1个时钟后发送读写命令。也就是说本实施例选用的DDR2xa0SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目为1。总之芯片参数允许的最小时钟数目取决于选定的DDR2芯片,和DDR2初始化配置的AL,不过一旦时钟和DDR2芯片确定后,同时DDR2初始化完成后,这个芯片参数允许的最小时钟数目就固定了。本实施例设计为1个时钟,也就是active后就可以直接进行读写命令。本发明用FPGA控制DDR2xa0SDRAM提高数据传输效率的方法流程如图1所示,包括步骤:步骤101、选定将要采用的SDRAM芯片,根据芯片参数,确定单次完成突发长度读或写操作命令需要的最小时钟数目,定义为t1。步骤102、根据芯片单个突发长度对应的时钟数目,定义为t2。步骤103、确定总周期,如果t1的值大于t2和bank数目的乘积,即t1>(t2*bank个数),那么总周期是t1,如果t1的值大于t2和bank数目的乘积,即t1>(t2*bank个数),那么总周期是t2*bank个数。步骤104、初步编排控制命令表,表里面每一个位置占用一个时钟周期,首先确定bank0的命令表。第一个时钟位置放置active命令,然后向后偏移DDR2xa0SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目,放置read或write命令。接着继续向后偏移DDR2xa0SDRAM芯片参数允许的读/写至关闭最小时钟数目,放置precharge命令。在控制命令表内增加bank1的命令。在bank0的active命令向后偏移t2时钟周期,放置bank1的active命令。依次类推,在bank0的read或write命令向后偏移t2时钟周期放置bank1的read或write命令,最后放置precharge命令。依次类推,确定所有bank的命令编排。原则上要求所有的命令都控制在总时钟周期内。超过总时钟周期范围的,就返回到控制命令表的前面,向后逐个找空闲的时钟周期。另外,如果当前编排的命令和已经安排的bank的命令位置冲突,将已经安排的bank的命令向后挪动一个时钟位置。这样总周期会增加1个时钟。如果t1的值大于t2和bank数目的乘积,即t1>(t2*bank个数),向后挪动一个时钟位置会使总周期数增加一个时钟周期,如果t1的值小于t2和bank数目的乘积,即t1<(t2*bank个数),编排首个bank时,最后的precharge命令可以向后挪动,而不影响总周期数,但挪动的数目不能超过(t2*bank个数)–t1。步骤105、FPGA按照控制命令表控制SDRAM读写,实现高效率的数据传输。具体地,读控制命令表编排如图2所示。一次完整的命令包括:激活(active),读/写(read或write),关闭(precharge)。首先根据DDR2xa0SDRAM参数,确定DDR2xa0SDRAM的read命令的最小周期,按照下述公式:t1=active+max(tRAS,(AL+BL/2+max(tRTPxa0orxa02CK)–2CK))+tRP其中CK为时钟周期,计算结果为15个时钟周期,即t1等于15;本实施例Burstxa0Length是8,需要4个时钟,t2为4。由于4个库的单个突发长度的读写周期为16,即t2*4>t1,所以确定总周期为16个时钟。首先确定bank0的命令表。第一个时钟放置bank0的active命令,第二个时钟放read命令,然后选择max(tRAS,(AL+BL/2+max(tRTPxa0orxa02CK)–2CK)放置关闭命令,因为tRAS为10,所以precharge命令放到第十一个时钟;然后确定bank1的命令表。第五个时钟放置bank1的active命令,第六个时钟放read命令,precharge命令放到第十五个时钟;然后确定bank2的命令表。第九个时钟放置bank2的active命令,第十个时钟放read命令,第十个时钟放bank1的read命令,第三个时钟放bank2的precharge命令。依次类推,确定bank3的命令表。具体地,写控制命令表编排如图3所示,对于写write命令的最小周期,按照下述公式:t1=1+max(tRAS,(AL+CL+BL/2+tWR)+tRP其中,tWR为写4个时钟,计算出t1为20。由于t1=20>(t2*4)=16,因此确定写控制命令表总周期是20。首先确定bank0的命令表。第一个时钟位置放置active命令。向后偏移DDR2xa0SDRAM芯片参数允许的激活命令与读/写命令之间最小时钟数目计算是1个时钟周期,在第二个时钟,放置write命令。后偏移DDR2SDRAM芯片参数允许的写至关闭最小时钟数目,根据max(tRAS,(AL+CL+BL/2+tWR),是15个时钟周期,所以在第十六个时钟放置precharge命令。这样,bank0的命令编写完毕。继续确定bank1的命令表,在bank0的active命令向后偏移t2时钟周期,t2是4个时钟周期,因此,从第一个时钟向后移动4个时钟周期,在第五个时钟,放置active命令,同样,write命令和precharge命令都向后移动4个时钟周期,bank0的write命令和precharge命令在第二个和第十六个时钟,相应的bank1的write命令和precharge命令,放置在第六个和第二十个。继续确定bank2的命令表,和bank1的命令表类似。这里的不同是在放置bank2的precharge命令时,需要放到第二十四个时钟,超过了总周期t1,根据前面的规则,超过t1范围的,就返回到控制命令表的前面,向后逐个找空闲的时钟周期,这样就可以从命令表的位置逐步查找,确定第四个时钟放置bank2的precharge命令。继续确定bank3的命令表,和bank2的命令表类似。通常在具体电路设计中,第一个时钟运算的判决结果确定好以后,第二个时钟开始时必须要拿到第一个时钟处理的结果,才能进行判决,依次类推,每一时刻的电路必须拿到上一时钟的运算结果。如果要求时钟频率比较高,有些电路可能不能及时提供结果,就可以做一些优化,当电路一个时钟内不能提供运算结果,那么就再加一个时钟的时间处理,这样,该电路需要两个时钟来处理原来一个时钟处理的事情,这样就减小了设计的压力。当然,这样做会把整体的处理周期增加一个时钟,效率也相应降低些。为了提高效率,本发明的目标是在20个时钟内把上述的命令完成,如果实现有困难,就把总目标放宽,21,22,23个等,比较差的情况,是40个时钟完成,这个时候效率降低了一半,当然,设计难度就降低很多。排除DDR2xa0SDRAM周期性的自刷新影响,单纯的DDR2xa0SDRAM的4个bank循环读效率可以达到100%。读命令周期表建立完成后,写命令周期表建立方法类似。单纯的DDR2SDRAM的4个bank循环写效率可以达到80%。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的一般技术人员来说,本发明还可以有各种更改和变化。在不脱离本发明原理的前提下,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。